package main

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"os"
)

/*
	日志切割
		按时间切割  用hook方式
		按日志级别分割
*/
const (
	all  = "all"
	info = "info"
	err  = "err"
)

type FileLevelhook struct {
	file     *os.File
	errFile  *os.File
	infoFile *os.File
	logPath  string
}

func (F FileLevelhook) Levels() []logrus.Level {
	//return []logrus.Level{logrus.ErrorLevel}
	return logrus.AllLevels
}
func (F FileLevelhook) Fire(entry *logrus.Entry) error {
	line, _ := entry.String()
	//判断日志等级，不同的等级写到不同的文件中。最后在进行一个全部写入
	switch entry.Level {
	case logrus.InfoLevel:
		F.infoFile.Write([]byte(line))
	case logrus.ErrorLevel:
		F.errFile.Write([]byte(line))
	}
	F.file.Write([]byte(line))
	return nil
}
func InitLevel(logPath, appName string) {
	//创建目录
	err := os.MkdirAll(fmt.Sprintf("%s", logPath), os.ModePerm)
	if err != nil {
		logrus.Error(err)
		return
	}
	//打开日志文件 连续创建三个日志文件
	allfile, err := os.OpenFile(fmt.Sprintf("%s/%s.log", logPath, all), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	errfile, err := os.OpenFile(fmt.Sprintf("%s/%s.log", logPath, err), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	infofile, err := os.OpenFile(fmt.Sprintf("%s/%s.log", logPath, info), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		logrus.Error(err)
		return
	}
	filehook := FileLevelhook{allfile, errfile, infofile, logPath}
	logrus.AddHook(&filehook)
}
func main() {
	InitLevel("logrus_level", "test")
	logrus.Println("test1")
	logrus.Error("test2")
	logrus.Info("test3")
}
